//
// Created by user on 2022/3/9.
//

/*
 设计并实现一个 TwoSum 的类，使该类需要支持 add 和 find 的操作。

add 操作 - 对内部数据结构增加一个数。
find 操作 - 寻找内部数据结构中是否存在一对整数，使得两数之和与给定的数相等。
 示例 1:
add(1); add(3); add(5);
find(4) -> true
find(7) -> false

示例 2:
add(3); add(1); add(2);
find(3) -> true
find(6) -> false

 */
#include <vector>
#include <unordered_map>
class TwoSum {
private:

public:

    /** Initialize your data structure here. */
    TwoSum() {
        unordered_map<int, int> nums;
    }

    /** Add the number to an internal data structure.. */
    void add(int number) {
        if(nums.find(number)!=nums.end()){
            nums[number]+=1;
        } else{
            nums[number]=1;
        }
    }

    /** Find if there exists any pair of numbers which sum is equal to the value. */
    bool find(int value) {
        for (auto& kv : nums) {
            int target = value - kv.first;
            if (target == kv.first && nums[target] > 1) return true;
            if (target != kv.first && nums.count(target)) return true;
        }
        return false;
    }
};